package com.tedu.spring.day01;


import com.tedu.spring.demo.Person;
import org.junit.jupiter.api.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Demo {
    /*IOC容器——了解细节
      类多次测试，两种方案：main主方法输出  只想执行一次
                            junit单元测试输出   执行多次

        Junit单元测试
          1.导入junit外置包
          2.使用注解，语法：@Test
          3.空参的方法——类似主方法
     */
    @Test
    public void test01(){
        System.out.println("fzl吊毛");
    }

    //Spring IOC容器细节问题
    //1.默认情况下，多次获取同个id的bean将获取几个对象
    @Test
    public void test02(){
        /*1.创建IOC容器
             完成：1）加载bean(类)信息
                   2）反射创建空构造器对象
                   3）将id以map的key进行保存
        */
        ApplicationContext ac = new ClassPathXmlApplicationContext("beans.xml");
        //2.获取容器中对象
        Person p1 = (Person)ac.getBean("person");
        System.out.println("获取第一个人类对象：" + p1);
        Person p2 = (Person)ac.getBean("person");
        System.out.println("获取第二个人类对象：" + p2);
    }
    /**
     * ①默认情况下，多次获取同一id的bean将获取同一对象
     * ②不可以配置多个id相同的bean
     * ③配置多个id不同，但class相同的bean
     */

    /**
     * SpringIOC容器获取默认调用无参构造器
     *
     */
    @Test
    public void test03(){
        ApplicationContext ac = new ClassPathXmlApplicationContext("beans.xml");
        Location lo = (Location)ac.getBean("location");
        System.out.println(lo);
    }
}
